/**
 * 
 */
package co.com.sed.model.peers;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import co.com.sed.model.beans.Sitio;
import co.com.sed.model.util.Util;

/**
 * @author Mejia
 *
 */
public class SitioPeer {
	
	private static final String BUSCAR_SITIOS =
		"SELECT id_sitio, descripcion FROM sitio ";

	private static final String BUSCAR_SITIO =	
		"SELECT id_sitio, descripcion FROM sitio "+
		"WHERE id_sitio = &id_sitio";

	private static final String INSERTAR_SITIO  =
		"INSERT INTO sitio(descripcion ) VALUES "+
		"('&descripcion')";

	private static final String ACTUALIZAR_SITIO =
		"UPDATE sitio "+
		"SET descripcion = '&descripcion' "+
		"WHERE id_sitio = &id_sitio";

	private static final String ELIMINAR_SITIO =
		"DELETE FROM sitio "+
		"WHERE id_sitio = &id_sitio";

	/**
	 * 
	 */
	public SitioPeer() {
		// TODO Auto-generated constructor stub
	}

		/**
		 *  busca en la base de datos todos los registros de la tabla "sitio"
		 * 
		 * @param stmt				referencia al Statement, pasado por DataManager para realizar la consulta
		 * 
		 * @return					lista de sitio
		 * @see         			Sitio, Statement
		 */
	
	public static ArrayList<Sitio> buscarSitios(Statement stmt) {
		ArrayList<Sitio> sitios = new ArrayList<Sitio>();

		String sql = BUSCAR_SITIOS; //"SELECT id_sitio, descripcion FROM sitio ";

		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				while (rs.next()) {
					Sitio sit = new Sitio();

					sit.setIdSitio(rs.getInt("id_sitio"));
					sit.setDescripcion(rs.getString("descripcion")); 
					
					sitios.add(sit);
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:"
					+ e.getMessage());
			e.printStackTrace();
		}

		return sitios;
	}
	
		/**
		 *  busca en la base de datos un registro de la tabla "sitio"
		 * 
		 * @param stmt				referencia al Statement, pasado por DataManager para realizar la consulta
		 * @param idSitio		    id de la sitio que se desea cosultar
		 * 
		 * @return					sitio buscada
		 * @see        				Sitio, Statement
		 */
	
	public static Sitio buscarSitio(Statement stmt, int idSitio) {
		Sitio sitio = new Sitio();

		String sql = BUSCAR_SITIO;
		//"SELECT id_sitio, descripcion FROM sitio "+
		//"WHERE id_sitio = &id_sitio";
		
		
		// se setean los "parametros"
		sql = sql.replaceAll("&id_sitio", String.valueOf(idSitio));
		
		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				if (rs.next()) {
					sitio.setIdSitio(rs.getInt("id_sitio"));
					sitio.setDescripcion(rs.getString("descripcion"));
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:" + e.getMessage());
			e.printStackTrace();
		}

		return sitio;
	}
	
		/**
		 *  Inserta una sitio en la base de datos
		 * 
		 * @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
		 * @param sitio 		    sitio que se va a insertar en la base de datos
		 *  
		 * @return					void
		 * @throws SQLException		si ocurre un error al insertar el registro en la base de datos
		 * 
		 * @see         			DataManager
		 */
	
	public static int insertarSitio(Statement stmt, Sitio sitio) throws SQLException {
		int idNuevaSitio = -1;
		ResultSet rs = null;
		
		try {
			String sql = INSERTAR_SITIO;
			 //se setean los "parametros": &id_calificacion, &cualitativa, &cuantitativa, &descripcion 
			sql = sql.replaceAll("&descripcion", sitio.getDescripcion());
					
			stmt.executeUpdate(sql,Statement.RETURN_GENERATED_KEYS);
			
			rs = stmt.getGeneratedKeys();
			if (rs.next()) {
				idNuevaSitio = rs.getInt("id_sitio");
				Util.print("nuevo registro: " + idNuevaSitio);
			}
		} finally {
			rs.close();
		}
		
		return idNuevaSitio;
	}
		

		/**
		 *  Actualiza una sitio en la base de datos
		 * 
		 * @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
		 * @param sitio				sitio que se va a actualizar en la base de datos
		 * 
		 * @return					void
		 * @throws SQLException		si ocurre un error al actualizar el registro en la base de datos
		 * 
		 * @see         			DataManager
		 */
	
	public static void actualizarSitio(Statement stmt, Sitio sitio) throws SQLException {
		String sql = ACTUALIZAR_SITIO;
		 //se setean los "parametros": &id_sitio, &descripcion
		sql = sql.replaceAll("&id_sitio", "" + sitio.getIdSitio())
				 .replaceAll("&descripcion", sitio.getDescripcion());
		stmt.executeUpdate(sql);
	}
	
		/**
		 *  Elimina un Sitio en la base de datos
		 * 
		 * @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
		 * @param Sitio				sitio que se va a eliminar en la base de datos
		 * 
		 * @return					void
		 * @throws SQLException		si ocurre un error al eliminar el registro en la base de datos
		 * 
		 * @see         			DataManager
		 */
	
	public static void eliminarSitio(Statement stmt, Sitio sitio) throws SQLException {
		String sql = ELIMINAR_SITIO;
		// se setean los "id_sitio = &id_sitio";
		sql = sql.replaceAll("&id_sitio", "" + sitio.getIdSitio());

		stmt.executeUpdate(sql);
	}
	
}
